<?php
final class Dir{
    /**
     * 规范路径，统一linux和win路径
     * @param type $dirname目录
     * @return type
     */
    static public function dirPath($dirname){
        $dir=  str_replace("\\","/",$dirname);
        return substr($dir, -1)=="/"?$dir:$dir."/";
    }
    /**
     * 创建目录
     * @param  string $dir 目录如"a/b/ab/d"
     * @param type $auth 权限位如0755
     * @return type
     */
    static public function create($dir,$auth=0755){
       $dir=self::dirPath($dir);//规范路径
       if(is_dir($dir))continue;
       $dirs=  explode("/", $dir);
       $p='';
       foreach ($dirs as $d){
           $p.=$d."/";
           if(is_dir($p))continue;//$p存在继续
           mkdir($p,$auth);//$p不存在，创建！
       }
       return is_dir($dir);
    }
    /**
     * 删除目录
     * @param string $dirname目录或文件
     * @return boolean
     */
    static public function del($dirname){
        if(!file_exists($dirname)){
            return false;//判断目录或文件是否存在，不存在返回false
        }
        if(is_file($dirname)){
            @unlink($dirname);//是不是文件，是！删除！
        }
        foreach (glob($dirname.'/*') as $d){//遍历要删除的目录
            is_dir($d)?Dir::del($d):@unlink($d);//三元表达式判断
        }
        return rmdir($dirname); 
    }
    /**
     * 复制目录
     * @param type $sdir源目录
     * @param type $todir目标目录
     * @param type $del是否目标目录下的文件
     * @return boolean
     */
    static public function copy($sdir,$todir,$del=FALSE){
        $sdir=self::dirPath($sdir);
        $todir=  self::dirPath($todir);//规范路径
        if(!file_exists($sdir))return FALSE;//判断源目录
        if(!is_dir($todir)){
            self::create($todir);//判断目标目录
        }
        foreach(glob($sdir."*") as $s){
            $to=$todir.basename($s);//把遍历出来的$s复制到$todir
            if(is_dir($s)){//再判断$s是不是目录
                self::copy($s, $to);//是递归,在复制到$to中
            }  else {
                is_file($to)&&$del&&@unlink($to);//判断目标目录中的$to是不是文件，是文件并且要删除，就删除
                is_file($to)||copy($s, $to);//判断$to是不是文件，是什么都不做，不是复制$s到$to相当于if( is_file($to)){continue;}else{copy($s, $to);}
            }
        }
    }
}
//Dir::del("a");
//Dir::create("a/c/d/e")
//mkdir("a/b/c/1.php",0755,TRUE);
//Dir::copy("../7.20", "hd");
?>
